package com.xc.disk.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xc.disk.bean.FileBean;
import com.xc.disk.bean.FolderFileBean;
import com.xc.disk.dto.FileDto;
import com.xc.disk.dto.UploadDto;
import com.xc.disk.dto.UserDto;
import com.xc.disk.entity.FileEntity;
import com.xc.disk.info.SourceInfo;
import com.xc.disk.info.TokenInfo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * <p>项目名称: Stars</p>
 * <p>描述: 文件管理接口</p>
 * <P>创建人:小程 </p>
 * <P>创建人邮箱: 779943476@qq.com</p>
 * <p>创建时间: 2019/9/27</p>
 *
 * @version v1.0
 */
public interface FileService extends IService<FileEntity> {


    /**
     * 移动文件
     *
     * @param token       用户token信息
     * @param folderFiles 文件目录id集合
     */
    public void moveFileFolder(TokenInfo token, List<FolderFileBean> folderFiles);

    /**
     * 复制文件
     *
     * @param token       用户token信息
     * @param folderFiles 文件目录id集合
     */
    public void copyFileFolder(TokenInfo token, List<FolderFileBean> folderFiles);

    /**
     * 重命名
     *
     * @param name     原名称
     * @param parentId 父级id
     * @param userId   用户id
     * @return 新名称
     */
    public String rename(String name, String parentId, String userId);

    /**
     * 获取下载文件地址
     *
     * @param fileEntity 文件信息
     * @return 文件下载地址
     */
    public String getDownloadUrl(FileEntity fileEntity);

    /**
     * 根据文件id，用户id，数据类型，获取文件信息
     *
     * @param id 文件id
     * @return 文件信息
     */
    public FileEntity getFileById(String id);

    /**
     * 根据目录id查询文件集合
     *
     * @param folderId 目录id
     * @return 文件集合
     */
    public List<FileEntity> getFileByFolderId(String folderId);

    /**
     * 修改文件
     *
     * @param id   文件id
     * @param name 文件名称
     * @return 返回结果
     */
    public FileEntity updateFile(TokenInfo<UserDto> token, String id, String name);

    /**
     * 创建文件
     *
     * @param fileDto 文件信息
     */
    public FileEntity createFileInfo(FileDto fileDto);


    /**
     * 获取开发文件
     *
     * @param request 请求信息
     * @param fid     文件id
     * @return 文件信息
     */
    public FileEntity getDevFile(HttpServletRequest request, String fid);

    /**
     * 删除开发文件
     *
     * @param ids    文件id集合
     * @param userId 用户id
     */
    public void deleteDevFile(List<String> ids, String userId);

    /**
     * 获取文件源信息
     *
     * @param hashCode 文件hash
     * @return 返回文件源信息
     */
    public SourceInfo getSource(String hashCode);

    /**
     * 获取可以使用的文件源
     *
     * @param size 即将上传文件的大小
     * @return 文件源信息
     */
    public SourceInfo getSourceInfo(Long size);
}
